package corn

import "sync"

// 定时任务工作调度器
type TaskScheduler struct {
	Tasks []TaskInterface
}

var (
	taskSchedulerInstance *TaskScheduler
	taskSchedulerOnce     sync.Once
)

func TaskSchedulerInstance() *TaskScheduler {
	taskSchedulerOnce.Do(func() {
		taskSchedulerInstance = &TaskScheduler{}
	})
	return taskSchedulerInstance
}

// Start 开启调度器工作
func (s *TaskScheduler) Start(tasks []TaskInterface) (err error) {
	s.Tasks = tasks
	for _, t := range tasks {
		// 判断是否启用
		if t.GetStatus() != STATUS_RUNNING {
			continue
		}
		err = t.Start()
		if err != nil {
			return
		}
	}
	return
}

// Stop 停止调度器工作
// 确保并发安全，引入锁
func (s *TaskScheduler) Stop() {
	for _, t := range s.Tasks {
		t.Stop()
	}
}
